// Implementation of the ServerSocket class

#include "ServerSocket.h"
#include "SocketException.h"
#include <fstream>
#include <iostream>
#include <stdlib.h>

using namespace std;

ServerSocket::ServerSocket ( int port )
{
  
  if ( ! Socket::create ( ) )
    {
      throw SocketException ( "Could not create server socket." );
    }

  if ( ! Socket::bind ( port ) )
    {
      throw SocketException ( "Could not bind to port." );
    }

  if ( ! Socket::listen ( ) )
    {
      throw SocketException ( "Could not listen to socket." );
    }

}

ServerSocket::~ServerSocket()
{
}


const ServerSocket& ServerSocket::operator << ( const string& s ) const
{
  if ( ! Socket::send ( s ) )
    {
      throw SocketException ( "Could not write to socket." );
    }

  return *this;

}

const ServerSocket& ServerSocket::operator >> ( string& s ) const
{
  if ( ! Socket::recv ( s ) )
    {
      throw SocketException ( "Could not read from socket." );
    }

  return *this;
}

const ServerSocket& ServerSocket::sendfile(string& fname) const
{
  Socket::sendfile(fname);
  return *this;
}

string ServerSocket::recvfile() const
{ 
  return Socket::recvfile();
}

void ServerSocket::accept ( ServerSocket& sock )
{
  if ( ! Socket::accept ( sock ) )
    {
      throw SocketException ( "Could not accept socket." );
    }
}

void ServerSocket::close ( )
{
  Socket::close();
}

string ServerSocket::get_IP(){
  return Socket::get_IP();
}

void ServerSocket::set_non_blocking (bool b){
  Socket::set_non_blocking(b);
}
